const isDevelopment = process.env.NODE_ENV === 'development';
const isDebug = process.env.LOG_DEBUG === 'true';

/**
 * 解析日志保留时间配置
 * @param {string} retentionStr 保留时间字符串，如 "30d", "6m", "1y"
 * @returns {Object} 解析后的保留时间对象 {value, unit}
 */
function parseRetentionTime(retentionStr) {
  if (isDebug) {
    console.log(`[日志配置] 解析保留时间配置: ${retentionStr}`);
  }

  if (!retentionStr) {
    if (isDebug) {
      console.log(`[日志配置] 未设置保留时间，使用默认值: 1y`);
    }
    return { value: 1, unit: 'y' }; // 默认1年
  }

  const match = retentionStr.match(/^(\d+)([dmy]|day|days|month|months|year|years)?$/i);
  if (!match) {
    
    if (isDevelopment || isDebug) {
      console.error(`[日志配置] 保留时间格式错误，使用默认值: 1y`);
    }
    return { value: 1, unit: 'y' }; // 格式错误，使用默认值
  }

  const value = parseInt(match[1]);
  const unit = (match[2] || 'd').toLowerCase();

  // 验证数值是否有效
  if (isNaN(value) || value <= 0) {
    
    if (isDevelopment || isDebug) {
      console.error(`[日志配置] 保留时间数值无效，使用默认值: 1y`);
    }
    return { value: 1, unit: 'y' };
  }

  // 标准化单位
  let normalizedUnit = unit;
  if (['d', 'day', 'days'].includes(unit)) normalizedUnit = 'd';
  if (['m', 'month', 'months'].includes(unit)) normalizedUnit = 'm';
  if (['y', 'year', 'years'].includes(unit)) normalizedUnit = 'y';

  if (isDebug) {
    console.log(`[日志配置] 解析完成，保留时间: ${value}${normalizedUnit}`);
  }
  return { value, unit: normalizedUnit };
}

/**
 * 计算过期日期
 * @param {Object} retention 保留时间配置 {value, unit}
 * @returns {Date} 过期日期
 */
function getExpiredDate(retention) {
  const { value, unit } = retention;
  const now = new Date();

  if (isDebug) {
    console.log(`[过期计算] 当前时间: ${now.toISOString()}, 保留配置: ${value}${unit}`);
  }

  switch (unit) {
    case 'd':
      now.setDate(now.getDate() - value);
      if (isDebug) {
        console.log(`[过期计算] 减去${value}天后的过期时间: ${now.toISOString()}`);
      }
      return now;
    case 'm':
      now.setMonth(now.getMonth() - value);
      if (isDebug) {
        console.log(`[过期计算] 减去${value}个月后的过期时间: ${now.toISOString()}`);
      }
      return now;
    case 'y':
      now.setFullYear(now.getFullYear() - value);
      if (isDebug) {
        console.log(`[过期计算] 减去${value}年后的过期时间: ${now.toISOString()}`);
      }
      return now;
    default:
      now.setFullYear(now.getFullYear() - 1); // 默认一年
      if (isDebug) {
        console.log(`[过期计算] 使用默认值(1年)后的过期时间: ${now.toISOString()}`);
      }
      return now;
  }
}

module.exports = {
  parseRetentionTime,
  getExpiredDate
};